#ifndef __serial_port_h__
#define __serial_port_h__

#define CONFIG_SYS_NS16550_REG_SIZE (-4)
#include "ns16550.h"

#define NS16550_RBR (int)(&((struct NS16550*)0)->rbr)
#define NS16550_IER (int)(&((struct NS16550*)0)->ier)
#define NS16550_FCR (int)(&((struct NS16550*)0)->fcr)
#define NS16550_LCR (int)(&((struct NS16550*)0)->lcr)
#define NS16550_MCR (int)(&((struct NS16550*)0)->mcr)
#define NS16550_LSR (int)(&((struct NS16550*)0)->lsr)
#define NS16550_MSR (int)(&((struct NS16550*)0)->msr)
#define NS16550_SPR (int)(&((struct NS16550*)0)->spr)
#define NS16550_MDR1 (int)(&((struct NS16550*)0)->mdr1)
#define NS16550_REG9 (int)(&((struct NS16550*)0)->reg9)
#define NS16550_REGA (int)(&((struct NS16550*)0)->regA)
#define NS16550_REGB (int)(&((struct NS16550*)0)->regB)
#define NS16550_REGC (int)(&((struct NS16550*)0)->regC)
#define NS16550_REGD (int)(&((struct NS16550*)0)->regD)
#define NS16550_REGE (int)(&((struct NS16550*)0)->regE)
#define NS16550_UASR (int)(&((struct NS16550*)0)->uasr)
#define NS16550_SCR (int)(&((struct NS16550*)0)->scr)
#define NS16550_SSR (int)(&((struct NS16550*)0)->ssr)
#define NS16550_REG12 (int)(&((struct NS16550*)0)->reg12)
// copied from addressmap.h to avoid including 
#define ADDR_RANGE_READ  1            // Bus read
#define ADDR_RANGE_WRITE 2           // Bus write
#define ADDR_RANGE_DEL   3           // delete an address range



#define SERIAL_PORT_ADDR_SIZE sizeof(struct NS16550)
int serial_port_init();
void serial_port_do_clock();

void serial_port_handler(
	  void *lpContext,
	  int op, 
	  unsigned int dwAddress,           // start dwAddress on 32bit bus
	  char *pszBuff,           // optional 
	  unsigned int nBytes );            // in or out buffer
#endif //__serial_port_h__